#ifndef XPLAYER_AV_RENDER_CALLBACK_H
#define XPLAYER_AV_RENDER_CALLBACK_H

#include "utils_log.h"
#include "render_common.h"
#include <atomic>

// 渲染回调接口（仅内部使用，不暴露给上层）
// 用于AVPlayerCore内部处理渲染缓冲区状态和时间戳
class RenderCallback : public McRenderCallback {
public:
    ~RenderCallback() override = default;

    // 音频缓冲区可用：通知可继续推送音频帧
    void onAudioBufferAvailable(int queue_size) override {
        count_buffer_audio_ = queue_size;
    }

    // 视频缓冲区可用：通知可继续推送视频帧
    void onVideoBufferAvailable(int queue_size) override {
        count_buffer_video_ = queue_size;
    }

    // 时间戳更新：内部同步音视频进度（不向上层回调）
    void onPtsUpdated(bool is_audio, int64_t pts_us) override {
        is_audio_pts = is_audio;
        current_pts_us = pts_us;
    }

    // 获取当前播放时间戳（内部状态查询）
    int64_t getCurrentPts() const {
        return current_pts_us;
    }

    int getCountBufferAudio() const {
        return count_buffer_audio_;
    }

    int getCountBufferVideo() const {
        return count_buffer_video_;
    }

private:
    std::atomic<bool> is_audio_pts{false};        // 时间戳类型（音频/视频）
    std::atomic<int64_t> current_pts_us{-1};      // 当前播放时间戳
    std::atomic<int> count_buffer_audio_{0};
    std::atomic<int> count_buffer_video_{0};
};

#endif //XPLAYER_AV_RENDER_CALLBACK_H
